// 页数Tab切换
var $tab = $('.page-nav').find('a');
var $tabDiv = $('.tab-box');

$tab.click(function() {

    $tab.removeClass('active');
    $tabDiv.hide();

    $(this).addClass('active');
    //console.log($(this).index());
    $tabDiv.eq($(this).index()).show();

});

// 弹窗的Tab切换
var $tabWindow = $('.qs-tab-nav').find('a');
var $questionForm = $('.question-form');
$tabWindow.click(function() {
    $tabWindow.removeClass('active');
    $questionForm.hide();
    $(this).addClass('active');
    $questionForm.eq($(this).index()).show();
});
// 多个radio 单选效果
$(".radio-single").on("click",function(){
    $(this).parent().parent().find('.radio-single').removeClass("on");
    $(this).parent().parent().find('input.radioclass').attr("checked", false);
    $(this).addClass("on")
        .find('input.radioclass').attr("checked", true);
    //判断是否展示答案选项
    if($(this).parent().parent().find('input.radioclass').attr("name") == "answerType"){
    	 showAnswer();
    }
});
function showAnswer(){
	//var radio = $('input:radio[name="answerType"]:checked').val();
	var radio = $('input:radio[name="answerType"][checked]').val();
	if(radio == "3"){
		$("#showAnswer").attr("style", "display:none");
	}else{
		$("#showAnswer").attr("style", "");
	}
}

// 答案选项的radio效果
$('.btn-select-all').click(function () {
    if( $('.btn-select-all').hasClass('on') ) {
        $('.btn-select-all').removeClass('on');
        $('.btn-select-all input.radioclass').attr("checked", false);
        $('.radio-item').removeClass('on');
        $('.radio-item input.radioclass').attr("checked", false);
    } else {
        $('.btn-select-all').addClass('on');
        $('.btn-select-all input.radioclass').attr("checked", true);
        $('.radio-item').addClass('on');
        $('.radio-item input.radioclass').attr("checked", true);
    }
});

$('.radio-item').click(function () {
    if($(this).hasClass('on')) {
        $(this).removeClass('on');
        $(this).find('input.radioclass').attr("checked", false);
    } else {
        $(this).addClass('on');
        $(this).find('input.radioclass').attr("checked", true);
    }
});

//判断是新增或修改的全局变量
var add_update = "";
//点击选中展示虚线
$('.qs-list').on("click", "li", function() {
	$("ol").removeClass("line");
	$("li").removeClass("line");
	$(this).addClass("line");
	//阻止 click事件冒泡到父元素
	//event.stopPropagation();
	return false;
});
//上移或下移
function shift_up_down(flag){
	//获取需要移动的<li>对象
	var _d = $(".line");
	//获取该<li>的父级对象
	var _div = $(".line").parent();
	//获取该层级下所有<li>
    var _divs = _div.children("li");
	//获取当前<li>的位置
    var _divindex = _divs.index(_d); 
	//判断是上移或者下移，调用移动方法
	if(flag == "up"){
		shift_up(_d, _divs, _divindex);
	}else if(flag == "down"){
		shift_down(_d, _divs, _divindex);
	}
	//设置编号
    calculateNo();
}
//上移
function shift_up(_d, _divs, _divindex){
    if(_divindex > 0){
    	//当<li>位置不在最顶层时，将该<li>上移
        _divs.eq(_divindex-1).before(_d); 
    }
}
//下移
function shift_down(_d, _divs, _divindex){
    if(_divindex < _divs.length-1){
    	//当<li>位置不在最下层时，将该<li>下移
        _divs.eq(_divindex+1).after(_d); 
    }
}
//左移
function shift_left(){
	//获取选中<li>对象
	var _d = $(".line");
	//获取选中<li>的层级
	var level = _d.attr("level");
	//判断是否已到顶级，已到最顶级禁止继续向左移动
	if(level == "1"){
		return false;
	}
	//获取选中<li>的父级对象
	var parent = _d.parent().parent().parent();
	//将选中<li>追加到父级<li>后面
	parent.append(_d);
	//将当前级别升一级（-1）
	level = Number(level) - 1;
	//替换<li>中的级别（有强迫症，每行都有注释，这里不加感觉灰常不爽）
	_d.attr("level", level);
	//计算选中<li>的下级<li>的级别
	calculateLevel(-1);
	//计算编号
	calculateNo();
}
//右移
function shift_right(){
	//获取选中<li>对象
	var _d = $(".line");
	//获取选中<li>的层级
	var level = _d.attr("level");
	//获取选中的<li>同级的上一个<li>对象
	var prev = _d.prev();
	//判断是否有同级的上一个对象
	if(_d.prev().length == 0){
		return false;
	}
	//判断上一个对象是否是<li>
	if(_d.prev()[0].tagName != "LI"){
		return false;
	}
	if(prev.children(".qs-list").length == 0){
		//当上一个对象里没有下级菜单时，拼接一个完整的<ol>
		var html = _d.html();
		html = '<ol class="qs-list"><li level="'+(Number(level)+1)+'" class="line">' + html + '</li></ol>';
		prev.append(html);
		//删除原对象
		_d.remove();
	}else{
		//当上一个对象里有下级菜单时，将原对象追加到下级菜单下
		prev.children(".qs-list").append(_d);
		//修改当前对象的层级
		_d.attr("level", Number(level)+1);
	}
	//计算被移动的<li>的下级<li>的级别
	calculateLevel(1);
	//重新计算编号
	calculateNo();
}
//计算选中<li>的下级<li>的级别
function calculateLevel(num){
	$(".line li").each(function() {
		var level = Number($(this).attr("level")) + num;
		$(this).attr("level", level);
	});
}
//计算编号
function calculateNo(){
	//定义编码数组，每次获取的时候会根据层级对对应元素+1
	var array = [];
	//从最顶级回去全部li
	$(".qs-list li").each(function() {
		var obj = $(this);
		calculateNo2(obj, array);
	});
}
//计算编号子方法
function calculateNo2(obj, array){
	//获取当前li的级别
	var level = obj.attr("level");
	//获取每个层级下的新编码
	var num = calculateNo3(Number(level), array);
	//获取文本内容
	var text = obj.children("h3").text();
	//将文本用空格区分开,获取前面的编号
    var texts = text.split(" ");
	//替换编码
    var newText = text.replace(texts[0],num);
	//填充新的文本内容
    obj.children("h3").text(newText);
}
//计算编号子方法
function calculateNo3(level, array){
	var num = "";
	//获取层级对应数组下标
	var level2 = level - 1; 
	//当数组中没有该下标的元素时，默认为0
	if(array[level2] == undefined){
		array[level2] = 0;
	}
	//将该层级的数组元素+1
	array[level2] = array[level2] + 1;
	//循环拼接编号
	for(var i = 0; i < level; i++){
		if(i == level2){
			num += array[i];
		}else{
			num += array[i] + ".";
		}
	}
	//将下级层级对应下标的数组元素清0，相当于进位(3.2 ==》 4.0)
	for(var i = level; i < array.length; i++){
		array[i] = 0;
	}
	return num;
}
var $tagAdd = $(".tag-add")
var $tagWindow = $(".window-tag");
//新增tag
$tagAdd.click(function() {
    $tagWindow.show();
    $overlay.addClass('overlay-show');
});
// 弹出新增问题窗口 
var $questionAdd = $(".btn-add-question");
var $questionWindow = $(".window-question");
var $overlay = $('.overlay');
$questionAdd.click(function() {
	//初始化新增窗口
    initialize();
  //设置弹窗标题
	$("#title").text("新增问题");
	//默认答案类型和是否必填的选择项
	defaultRadio("#qs_radio_q11");
	defaultRadio("#qs_radio_q32");
	//设置为新增问题窗口
    add_update = "add";
    //打开窗口
    $questionWindow.show();
    $overlay.addClass('overlay-show');
});
//默认答案类型和是否必填的选择项
function defaultRadio(id){
	$(id).parent().addClass("on");
    $(id).attr("checked", true);
}
//判断是新增还是修改
function addOrUpdate(){
	if(add_update == "add"){
		addQuestion();
	}else if(add_update == "update"){
		updateQuestion();
	}
}
//新增问题
function addQuestion(){
	//验证问题名称和答案是否填写
	if(!isAddQuestion()){
		return false;
	}
	//获取选中<li>对象
	var _d = $(".line");
	//获取选中<li>的层级
	var level = _d.attr("level");
	//判断是新增类型
	if($(".qs-main ol").children("li").length == 0 ||
			_d.length == 0){
		//当没有新增任何问题或没有选择任何问题时，默认等级为1级
		level = "1";
		//组装html
		var html = assembleHtml(level, "a");
		html = '<li level="'+level+'">' + html + '</li>';
		$("#main_ol").append(html);
	}else{
		//组装html
		var html = assembleHtml(level, "a");
		html = '<li level="'+level+'">' + html + '</li>';
	  	//获取选中<li>的父级对象
		var parent = _d.parent();
		//将新增的<li>增加到选择的<li>下
		parent.children(".line").after(html);
		event.stopPropagation();
	}
	//重新计算编号
	calculateNo();
	//新增完成后关闭窗口
	closeQuestionWindow();
}
//判断是否可以新增问题
function isAddQuestion(){
	var flag = true;
	if($("#questionName").val() == ""){
		flag = false;
		layer.msg("请输入问题名称");
		return flag;
	}
	//获取答案类型
	var answerType = $('input:radio[name="answerType"][checked]').val();
	//当答案类型不为填空时，判断答案选项的input框是否有空值
	if(answerType != "3"){
		$('input[name="answerSelect"]').each(function(){
			if($(this).val() == ""){
				flag = false;
				layer.msg("答案选项不能为空");
				return flag;
			}
		});
	}
	return flag;
}
//组装html
function assembleHtml(level, flag){
	//问题名称
	var name = $("#questionName").val();
	//问题描述
	var describe = $("#describe").val();
	//答案类型
	var answerType = $('input:radio[name="answerType"][checked]').val();
	//是否必填项
	var isRequired = $('input:radio[name="isRequired"][checked]').val();
	//拼接数组类型的答案选项（直接用数组会默认转成逗号分隔的字符串）
	var answer = '';
	$('input[name="answerSelect"]').each(function(){
		answer += '"' + $(this).val() + '",';
	});
	//是否勾选了“有其他选项”
	var select_other = $("#select_other").attr("checked");
	if(select_other == "checked"){
		answer += '"select_other",';
	}
	if(answer != ""){
		answer =  '[' + answer.substring(0, answer.length-1) + ']';
	}
	//问题编号默认为0, 0为占位符，新增问题的方法结束后会自动计算编号
    var html = '<h3>0 '+name+'</h3>';
    if(describe != ""){
    	//当有问题描述时展示问题描述
    	html+= '<p class="qs-note color999">'+describe+'</p>';
    }
    html+= '<input type="text" class="qs-input" placeholder="'+name+'" disabled="disabled">';
    html+= '<input type="hidden" name="questionName" value="'+name+'">';
    html+= '<input type="hidden" name="describe" value="'+describe+'">';
    html+= '<input type="hidden" name="answerType" value="'+answerType+'">';
    html+= '<input type="hidden" name="isRequired" value="'+isRequired+'">';
    html+= '<input type="hidden" name="tagExtId" value="">';
    html+= "<input type='hidden' name='answer' value='"+answer+"'>";
    //当操作为修改问题时，判断是否有子集，如有，则获取代码拼接html
    if(flag == "u" && $(".line").children("ol").length > 0){
    	html+= '<ol class="qs-list">' + $(".line").children("ol")[0].innerHTML + '</ol>';
    }
    return html;
}
//关闭问题窗口
function closeQuestionWindow(){
	$questionWindow.hide();
    $overlay.removeClass('overlay-show');
}
//删除问题
function delQuestion(){
	//获取选中<li>对象
	var _d = $(".line");
	if(_d.length == 0){
		layer.msg("请选择要删除的问题");
		return false;
	}
	var msg = "是否删除该问题？"
	//询问框
	layer.confirm(msg, {
	  	btn: ['是','否'] //按钮
	}, function(){
		//删除选中<li>对象
		_d.remove();
		//重新计算编号
		calculateNo();
		//关闭询问框
		layer.closeAll('dialog');
		//删除对应的数组元素
		console.log(_d.attr("tagExtId"));
		if(_d.attr("tagExtId") != ""){
			cusTagIds.removeByValue(_d.attr("tagExtId"));
		}
	});
}
//打开修改问题窗口
function openUpdateQuestion(){
	//获取选中<li>对象
	var _d = $(".line");
	if(_d.length == 0){
		layer.msg("请选择要修改的问题");
		return false;
	}
	//初始化修改问题窗口
	initialize();
	//设置弹窗标题
	$("#title").text("修改问题");
	//设置为修改问题窗口
    add_update = "update";
	//给修改问题框控件赋值
	setUpdateQuestion();
	//打开修改问题窗口
	$questionWindow.show();
	$overlay.addClass('overlay-show');
}
//给修改问题框控件赋值
function setUpdateQuestion(){
	var answerType = "", isRequired = "", answer = "";
	var level = $(".line").attr("level");
	//循环获取选中的input中的的值
	$("li.line").children("input").each(function(){
		var value = this.value;  
		var field = this.name;
		//当input为问题名称和问题描述时，直接赋值
		if(field == "questionName" || field == "describe"){
			$("#"+field).val(value);
		}
		//获取答案类型
		if(field == "answerType"){
			answerType = value;
			//当答案类型为填空时，隐藏答案选项
			if(value == "3"){
				$("#showAnswer").attr("style", "display:none");
			}
		}
		//获取是否必填项
		if(field == "isRequired"){
			isRequired = value;
		}
		//获取答案选项卡内容
		if(field == "answer"){
			answer = value;
		}
	});
	//答案类型
	$('input:radio[name="answerType"]').each(function(){
		if($(this).val() == answerType){
			$(this).parent().addClass("on");
		    $(this).attr("checked", true);
		}
	});
	//是否必填项
	$('input:radio[name="isRequired"]').each(function(){
		if($(this).val() == isRequired){
			$(this).parent().addClass("on");
		    $(this).attr("checked", true);
		}
	});
	
	//答案选项，先转成数组，然后按顺序赋值进input
	var answers = eval(answer);
	//当答案内容有“有其他选项”时，勾选“有其他选项”选项框
	var num = 0; //记录是否勾选了其他选项,当有勾选，在补全input框是减去一个
	if(answer.indexOf("select_other") > 0){
		num = 1;
		$("#select_other").parent().addClass("on");
	    $("#select_other").attr("checked", true);
	}
	//查询当前答案选项input框数量
	var answerSelectLength = $('input[name="answerSelect"]').length;
	//当答案选项数（减去“有其他选项”）大于当前input框时，补全input框
	if((answers.length - num) > answerSelectLength){
		for(var i = answerSelectLength; i < (answers.length - num); i++){
			addAnswer();
		}
	}
	var i = 0;
	$('input[name="answerSelect"]').each(function(){
		if(answers[i] != "select_other"){
			$(this).val(answers[i]);
		}
		i++;
	});
}
//修改问题
function updateQuestion(){
	//验证问题名称和答案是否填写
	if(!isAddQuestion()){
		return false;
	}
	//获取选中<li>对象
	var _d = $(".line");
	//获取选中<li>的层级
	var level = _d.attr("level");
	//组装html
	var html = assembleHtml(level, "u");
	//在页面展示组装好的html（有强迫症，每行都有注释，这里不加感觉灰常不爽）
  	_d.html(html);
	//重新计算编号
	calculateNo();
	//新增完成后关闭窗口
	closeQuestionWindow();
}
//初始化新增/修改窗口
function initialize(){
	//默认打开常规面板
	$tabWindow.removeClass('active');
    $questionForm.hide();
    $(".qs-tab-left").addClass('active');
    $questionForm.eq($(".qs-tab-left").index()).show();
    $("#showAnswer").attr("style", "");
	//清空input数据
	$("#questionName").val(""); //问题名称
	$("#describe").val(""); //问题描述
	//默认不勾选答案类型的选择项
	$('input:radio[name="answerType"]').each(function(){
		$(this).parent().removeClass("on");
		$(this).attr("checked", false);
	});
  	//默认不勾选是否必填的选择项
	$('input:radio[name="isRequired"]').each(function(){
		$(this).parent().removeClass("on");
		$(this).attr("checked", false);
	});
    //清空答案选项数据，并删除多余的input, 默认保留1个input框
    var i = 0;
    $('input[name="answerSelect"]').each(function(){
    	if(i < 1){
    		$(this).val("");	
    	}else{
    		$(this).parent().remove();
    	}
		i++;
	});
    //默认不勾选答案选项中的其他选项
    $("#select_other").parent().removeClass("on");
    $("#select_other").attr("checked", false);
}
//新增答案选项
function addAnswer(){
	var html = '<div class="select-item menu clearfix select-width">';
	    html+= '<input type="text" class="question-input pull-left" name="answerSelect" >';
    	html+= '<ul class="select-act-box pull-left">';
    	html+= '<li><a onclick="answer_up_down(this, \'up\')"><img src="'+jypath+'/resources/images/btn-up.png" alt="上移"></a></li>';
        html+= '<li><a onclick="answer_up_down(this, \'down\')""><img src="'+jypath+'/resources/images/btn-down.png" alt="下移"></a></li>';
        html+= '</ul>';
    	html+= '<a class="btn-del pull-right" onclick="delAnswer(this)">删除</a>';
		html+= '</div>';
	$(".select-form").append(html);
}
//删除答案选项
function delAnswer(obj) {
	var parent = $(obj).parent();
	parent.remove();
}
//答案选项上移或下移
function answer_up_down(obj, flag){
	//获取需要移动的答案选项对象
	var _d = $(obj).parent().parent().parent();
	//获取该答案选项的最外层对象
	var _div = _d.parent();
	//获取该层级下所有答案选项
    var _divs = _div.children("div");
	//获取当前答案选项的位置
    var _divindex = _divs.index(_d); 
	//判断是上移或者下移，调用通用移动方法
	if(flag == "up"){
		shift_up(_d, _divs, _divindex);
	}else if(flag == "down"){
		shift_down(_d, _divs, _divindex);
	}
}
//保存问卷时获取问题内容
function getQuestion(obj){
	var questionName = "", describe = "", answerType = "", isRequired = "", tagExtId = "", answer = "";
	//获取当前问题的级别
	var level = obj.attr("level");
	//获取问题名称
	var text = obj.children("h3").text();
	//将文本用空格区分开,获取前面的编号
    var texts = text.split(" ");
    problemCode = texts[0];
    questionName = texts[1];
    //循环获取选中的input中的的值
	obj.children("input").each(function(){
		var value = $(this).val();  
		var field = $(this).attr("name");
		//当获取问题描述
		if(field == "describe"){
			describe = value;
		}
		//获取答案类型
		if(field == "answerType"){
			answerType = value;
		}
		//获取是否必填项
		if(field == "isRequired"){
			isRequired = value;
		}
		//客户标签问题ID
		if(field == "tagExtId"){
			tagExtId = value;
		}
		//获取答案选项卡内容
		if(field == "answer"){
			answer = value;
		}
	});
    //组装json
    var json = {
    	"question": questionName,
    	"questionnaireDescribe": describe,
    	"answerType": answerType,
    	"isRequired": isRequired,
    	"tagExtId": tagExtId,
    	"answer": answer,
    	"problemCode": problemCode,
    	"level": level
    };
    return json;
}

/**
 *查询已保存的问题
 *先查询所有1级问题，然后用递归获取每个1级问题下的子集
 */
var html_2 = ""; //用于记录问题子集的html
function loadQuestion(url, questionnaireId){
	//设置加载层
	var loadIndex = layer.load(1, {
        shade: [0.1,'#fff'] //0.1透明度的白色背景
    });
	$.ajax({
		type: 'post',
        url: url,
        data:{
            "questionnaireId": questionnaireId,
            "level": "1"
        },
        dataType: 'json',
        async: false,
        success: function(data){
        	if(data.res != "1"){
        		return false;
        	}
        	var entity = data.obj.entity;
        	var level = "1";
        	var up_html = "";
        	for(var i = 0; i < entity.length; i++){
        		var info = entity[i];
        		//组装html
        		var html = questionHtml(info);
        	    html_2 = ""; //查询子集前，先将子集内容清空
        	    //使用递归组装子集问题模板
        	    var html2 = loadQuestionHtml(url, Number(info.level)+1, info.problemCode, questionnaireId);
        	    if(html2 != ""){
        	    	html2 = html2 + '</li>';
        	    }
        	    html = html+html2;
    			//当级别为1级时，追加在顶层<ol>中
    		 	$("#main_ol").append(html);
        	}
        	layer.closeAll('loading'); //关闭加载层
        }
	});
}
/**
 *使用递归组装子集问题模板
 *通过传入的问题级别（level）计算新的问题编号，然后查询对应的问题
 */
var oldLevel = ""; //保存上一次查询的问题的级别，用于判断是否拼接当前层级的开始或结束标签(<ol>)
var num = 0; //计数器，用于判断是否有跳级的情况（由2.1.1 ==》 3，缺少2.2过渡）
function loadQuestionHtml(url, level, problemCode, questionnaireId){
	//当层级为1时，退出递归
	if(level == "1"){
		return html_2;
	}
	//计算新问题编号
	var newProblemCode = "";
	var pc = problemCode.split(".");
	if(Number(level) > pc.length){
		//当问题层级大于编号层级时，表示查找下一级问题，在问题编号后拼接'.1'
		newProblemCode = problemCode + "." + 1;
	}else if(Number(level) < pc.length){
		//当问题层级小于编号层级时，表示查找上一级问题，去掉编号的最后一位数，并对新编号尾数+1
		for(var v = 0; v < pc.length-1; v++){
			if(v+1 < pc.length-1){
				newProblemCode += pc[v] + ".";
			}else{
				newProblemCode += Number(pc[v])+1;
			}
		}
	}
	$.ajax({
		type: 'post',
        url: url,
        data:{
            "questionnaireId": questionnaireId,
            "level": level,
            "problemCode": newProblemCode
        },
        dataType: 'json',
        async: false,
        success: function(data){
        	if(data.res != "1"){
        		return html;
        	}
        	var entity = data.obj.entity;
        	if(entity.length <= 0){
        		if(html_2 != ""){
        			html_2+= '</li>';
        		}
        		//当连续两次未查到上级时，拼接结束标签
        		if(num > 1){
        			html_2+= '</ol></li>';
        		}
        		num++;
        		//递归计算上一级
        		loadQuestionHtml(url, Number(level)-1, newProblemCode, questionnaireId);
        	}else{
        		num = 0;
        		var info = entity[0];
				//当子集的内容为空或者当前级别数字比之前的问题级别数字大时，拼接层级开始标签
        		if(html_2 == "" || Number(oldLevel) < Number(info.level)){
        			html_2 += '<ol class="qs-list">';
        		}else if(Number(oldLevel) > Number(info.level)){
        			//当前级别数字比之前的问题级别数字小时，拼接层级结束标签
        			html_2 += '</ol>';
        		}
        		oldLevel = info.level; //将当前层级赋值给全局变量，用于记录上级层级
        		//组装html
           		html_2 += questionHtml(info);
           		//递归计算下一级
           		loadQuestionHtml(url, Number(level)+1, newProblemCode, questionnaireId);
        	}
        }
	});
	return html_2;
}
//保存已生成的客户标签ID
var cusTagIds = [];
//组装html——用于初始化页面
function questionHtml(info){
	var tagExtId = "";
	if(info.tagExtId != undefined){
		cusTagIds.push(info.tagExtId);
		tagExtId = info.tagExtId;
	}
	var html = '<li level="'+info.level+'" tagExtId="'+tagExtId+'">';
	html += '<h3>'+info.problemCode+' '+info.question+'</h3>';
	var describe = info.questionnaireDescribe;
    if(describe != ""){
    	//当有问题描述时展示问题描述
    	html+= '<p class="qs-note color999">'+describe+'</p>';
    }
    html+= '<input type="text" class="qs-input" placeholder="'+info.question+'" disabled="disabled">';
    html+= '<input type="hidden" name="questionName" value="'+info.question+'">';
    html+= '<input type="hidden" name="describe" value="'+describe+'">';
    html+= '<input type="hidden" name="answerType" value="'+info.answerType+'">';
    html+= '<input type="hidden" name="isRequired" value="'+info.isRequired+'">';
    html+= '<input type="hidden" name="tagExtId" value="'+tagExtId+'">';
    html+= "<input type='hidden' name='answer' value='"+info.answer+"'>";
    return html;
}